package com.swf.common.base;

import java.io.*;
import java.util.*;
import java.util.Map.Entry;

import org.slf4j.*;

import com.swf.common.exception.*;
import com.swf.common.i18n.*;
import com.swf.common.utils.*;

public class FwsStandard {
	private static Logger logger = LoggerFactory.getLogger(FwsStandard.class);
	/**
	 * 默认加载xml的编码
	 */
	private static Map<String, String> encoding_typeMap = new HashMap<String, String>();
	/**
	 * 所有的默认编码
	 */
	public static String encoding = "UTF-8";

	/**
	 * i18n资源中心
	 */
	protected static ResourceCenter RESOURCE_CENTER;

	/**
	 * 初始化资源中心
	 * 
	 * @param filePath
	 *            相对与classpath的路径
	 * @throws WebException
	 */
	public static void initResourceCenter(String resourceFilePath) {
		try {
			RESOURCE_CENTER = new ResourceCenter(resourceFilePath);
		} catch (FwsException e) {
			logger.error(e.getMessage(), e);
		}
	}

	public static String getResourceDisplayAt(String resourceName,
			String language) {
		if (RESOURCE_CENTER != null) {
			return RESOURCE_CENTER.getResourceDisplayAt(resourceName, language);
		}
		return resourceName;
	}

	/**
	 * 初始化文件类型编码
	 * 
	 * @param encodingMap
	 *            编码Map
	 * @param isAppend
	 *            是否追加,默认不追加直接覆盖
	 */
	public static void initEncodingCenter(Map<String, String> encodingMap,
			boolean isAppend) {
		mapCopy(encodingMap, encoding_typeMap, isAppend);
	}

	/**
	 * 初始化文件类型编码
	 * 
	 * @param encodingMap
	 *            编码Map
	 */
	public static void initEncodingCenter(Map<String, String> encodingMap) {
		mapCopy(encodingMap, encoding_typeMap, false);
	}

	/**
	 * 复制srcMap到destMap中，并将key保存为大写，并判断是否追加
	 * 
	 * @param srcMap
	 * @param destMap
	 * @param isAppend
	 *            追加，则直接添加，不追加，则清空原来的，再添加
	 */
	private static void mapCopy(Map srcMap, Map destMap, boolean isAppend) {
		if (isAppend) {
			mapCopy(srcMap, destMap);
		} else {
			destMap.clear();
			mapCopy(srcMap, destMap);
		}
	}

	/**
	 * 复制srcMap到destMap中，并将key保存为大写
	 * 
	 * @param srcMap
	 * @param destMap
	 */
	private static void mapCopy(Map srcMap, Map destMap) {
		if (srcMap == null) {
			logger.info("源Map不能为空");
			return;
		}
		Iterator iterator = srcMap.entrySet().iterator();
		while (iterator.hasNext()) {
			Map.Entry<String, String> entry = (Entry<String, String>) iterator
					.next();
			String key = entry.getKey().toUpperCase();
			String value = entry.getValue();
			destMap.put(key, value);
		}
	}

	/**
	 * 根据文件类型获取编码
	 * @param type
	 * @return
	 */
	public static String getEncodingByType(String type) {
		if (type == null || type.length() == 0) {
			return encoding;
		} else {
			return FwsStringUtils.nvl(encoding_typeMap.get(type.toUpperCase()),
					encoding);
		}
	}
	
	
	/**
	 * 获取settings中的指定id的值
	 * @param id
	 */
	public static String getBasicSettingsValue(String id ) {
		return "";
	}
}
